﻿using Model;
using Model.Block;

namespace BehaviorModel.Block
{
    /// <summary>
    /// Describes common properties of all input blocks.
    /// These blocks can send request to another blocks.
    /// </summary>
    public interface ISenderBlock : IBlock
    {
        /// <summary>
        /// Connects receiver block to current sender block.
        /// </summary>
        void ConnectReceiverBlock(IReceiverBlock receiverBlock);

        /// <summary>
        /// Disconnects receiver block with current sender block.
        /// </summary>
        /// <param name="receiverBlock"></param>
        void DisconnectReceiverBlock(IReceiverBlock receiverBlock);

        /// <summary>
        /// Sends request to receiver block.
        /// </summary>
        void Send(Request request);
    }
}
